Всег­да при­ятно най­ти новый инс­тру­мент, который, может, хоть чуточ­ку, но облегчит жизнь. Неваж­но, кто ты — админ, хакер или кодер, — в сегод­няшней под­борке ты обя­затель­но най­дешь что‑нибудь полез­ное. Нас ждут: еще один кра­сивый даш­борд, пароли с сюр­при­зом на слу­чай вынуж­денной раз­бло­киров­ки, кли­ент SSH с устой­чивым кон­нектом и мно­го дру­гих полез­ных штук.

Не так дав­но мы уже пуб­ликова­ли мою боль­шую под­борку тулз для авто­мати­зации работы. Вдох­новив­шись позитив­ными отзы­вами, я сно­ва перерыл все загаш­ники и извлек еще пару десят­ков год­ных инс­тру­мен­тов, которые дела­ют жизнь при­ятнее в мелочах. Некото­рые из них не раз выруча­ли меня, ког­да нуж­но было сде­лать что‑то быс­тро и не изоб­ретая велоси­пед.

 

Сеть

 

Netfilter

Каж­дый админ в жиз­ни дол­жен пос­тро­ить сеть, обру­гать бух­галте­ра и настроить фай­рвол. С пер­вой задачей ты спра­вишь­ся сам, вто­рая — пол­ностью опци­ональ­на, а мы погово­рим о фай­рво­ле.

Фи­липп Юмо (Philippe Humeau) из CrowdSec написал пару от­личных скрип­тов для авто­мати­чес­кого под­нятия защиты и нас­трой­ки мар­шру­тиза­ции на сис­темах с под­дер­жкой iptables/nftables. В ком­плек­те идут нас­трой­ки для knockd, который реали­зует port knocking кра­сиво.

Есть под­дер­жка нес­коль­ких аплинков и VPN. А еще автор спе­циаль­но ста­рает­ся дер­жать скрип­ты для iptables и nftables мак­сималь­но похожи­ми, что­бы облегчить миг­рацию тем, кто еще это­го не сде­лал.

Фрагмент скрипта
Фраг­мент скрип­та
 

adbwebkit

Adbwebkit — это хорошая веб‑мор­да для вза­имо­дей­ствия с устрой­ством на Android по ADB. Пред­став­ляет собой пач­ку скрип­тов на PHP, которые пар­сят вывод штат­ного кли­ента ADB в сис­теме и выводят резуль­тат в веб‑интерфейс. Мне при­годи­лось для работы с телефо­ном, у которо­го очень пло­хо работал сен­сор, а дос­туп к сис­теме был нужен.

Ус­танов­ка дела­ется в четыре коман­ды, вклю­чая уста­нов­ку зависи­мос­тей:

sudo apt install -y git php
git clone https://github.com/jxroot/adbwebkit.git
cd adbwebkit
php -S 127.0.0.1:8000

Пос­ле это­го веб‑интерфейс ста­нет дос­тупен по адре­су localhost:8000.

Демо из репозитория проекта
Де­мо из репози­тория про­екта
 

Дашборды

 

Cockpit

Cockpit — это не сов­сем даш­борд. Это боль­шая веб‑кон­соль для управле­ния сер­вером.

Ус­танов­ка мак­сималь­но прос­та:

sudo apt update
sudo apt install cockpit
sudo systemctl enable cockpit
sudo systemctl start cockpit

За­тем нуж­но открыть порт 9090 на фай­рво­ле:

sudo ufw allow 9090/tcp

Даль­ше мож­но нас­тро­ить дос­туп через реверс‑прок­си nginx по име­ни хос­та с нор­маль­ными SSL-сер­тифика­тами и на при­выч­ных пор­тах.

Пос­ле всех манипу­ляций заходим на <твой-хост>:9090 и видим окно логина. В него вби­ваем имя поль­зовате­ля и пароль дей­стви­тель­ной учет­ной записи на сер­вере и видим даш­борд.

За упавший сервис не пинай — так задумано
За упав­ший сер­вис не пинай — так задума­но

Cockpit уме­ет рисовать гра­фики боль­шинс­тва инте­рес­ных мет­рик — в частности, заг­рузки дис­ка.

Disk I/O graph
Disk I/O graph

На вклад­ке Host дос­тупны дей­ствия с сер­вером: уста­нов­ка обновле­ний, рулеж­ка сер­висами, управле­ние питани­ем и так далее.

На­чина­юще­му адми­ну это может здо­рово облегчить жизнь.

 

btop++

Пом­нишь bashtop из прош­лой серии? Btop++ — это его реали­зация на C++ с повышен­ной про­изво­дитель­ностью. Умень­шен­ный интервал обновле­ния гра­фиков не при­водит к зна­читель­ному повыше­нию наг­рузки на про­цес­сор. При этом даш­борд выг­лядит столь же кра­соч­но и эффек­тно для неис­кушен­ного посети­теля тво­ей сер­верной!

 

Bottom

Bottom внеш­не похож на bashtop, но написан на Rust, что тоже озна­чает высокую про­изво­дитель­ность и низ­кую наг­рузку на про­цес­сор.

Bottom под­держи­вает Linux (на архи­тек­турах x86, x64 и aarch64), Windows (x86 и x64) и даже macOS!

Ус­танав­лива­ется на Debian-based-дис­три­бути­вы все­го в две коман­ды:

curl -LO https://github.com/ClementTsang/bottom/releases/download/0.6.4/bottom_0.6.4_amd64.deb
sudo dpkg -i bottom_0.6.4_amd64.deb

На Arch все еще про­ще:

sudo pacman -Syu bottom

Для Windows есть уста­нов­щик MSI, который мож­но прос­то ска­чать и запус­тить.

Для запус­ка ути­литы нуж­но писать не bottom, как ты мог подумать, а btm. Пос­ле стар­та уви­дишь что‑то похожее на скрин­шот.

Используется тема Gruvbox (--color gruvbox)
Ис­поль­зует­ся тема Gruvbox (--color gruvbox)
 

Viddy

Viddy — это сов­ремен­ный watch на Go с блек‑дже­ком и машиной вре­мени в ком­плек­те.

Ин­терес­но, что он поз­воля­ет не прос­то наб­людать за про­исхо­дящим, но и перема­тывать дей­ствия во вре­мени.

Ус­танов­ка в Linux-сис­темах сво­дит­ся к одной коман­де:

wget -O viddy.tar.gz https://github.com/sachaos/viddy/releases/download/v0.3.1/viddy_0.3.1_Linux_x86_64.tar.gz && tar xvf viddy.tar.gz && mv viddy /usr/local/bin

Из команд для управле­ния Viddy во вре­мя работы дос­таточ­но знать две: про­бел вклю­чает машину вре­мени, а s при­оста­нав­лива­ет выпол­нение вызыва­емой коман­ды.

 

Automation & Scripting

 

htmlq

Ко­неч­но, ты зна­ешь про jq — ути­литу для работы с JSON из тер­минала. А как нас­чет HTML? Ког­да пишешь скрип­ты для пар­синга вся­ких сай­тов, очень полез­но иметь воз­можность вза­имо­дей­ство­вать с HTML нор­маль­ным спо­собом, а не регуляр­ками. htmlq — это как раз такой инс­тру­мент.

На­писан htmlq на Rust и ста­вит­ся через Cargo:

cargo install htmlq

htmlq работа­ет через селек­торы CSS или атри­буты. Давай для при­мера вытащим все ссыл­ки с глав­ной «Хакера».

hackcat@srv8 ➜ curl --silent https://xakep.ru/ | htmlq --attribute href a
https://xakep.ru/wp-login.php?redirect_to=https%3A%2F%2Fxakep.ru%2F
https://xakep.ru/
https://xakep.ru/category/hack/
https://xakep.ru/category/privacy/
https://xakep.ru/category/tricks/
https://xakep.ru/category/coding/
https://xakep.ru/category/admin/
https://xakep.ru/category/geek/
https://my.xakep.ru/courses/
https://xakep.shop/
/wp-admin/users.php?page=paywall_subscribes&from=paywall_subscribe&subscribe=12_months
https://xakep.ru/tag/windows/
https://xakep.ru/tag/linux/
https://xakep.ru/tag/android/
https://xakep.ru/tag/zhelezo/
https://xakep.ru/tag/messengers/
https://xakep.ru/tag/leaks/
https://xakep.ru/tag/covid-19/
https://xakep.ru/issues/xa/
...
 

sysz

Sysz — это псев­догра­фичес­кий интерфейс для работы с юни­тами systemd. Он поз­воля­ет удоб­но прос­матри­вать и управлять сер­висами. Вот, нап­ример, как пос­мотреть сос­тояние демона Cockpit, который мы рас­смот­рели выше.

 

xargs

Ес­ли ты вдруг не слы­шал о xargs, то ты мно­гое про­пус­тил. Это ути­лита, которая вызыва­ет задан­ную коман­ду с аргу­мен­тами, передан­ными в потоке стан­дар­тно­го вво­да.

Вот прос­той при­мер: уда­лим все фай­лы лицен­зии всех прог­рамм, уста­нов­ленных в домаш­нюю пап­ку. Зачем? Не знаю, но с xargs это дела­ется вот таким инту­итив­ным кон­вей­ером:

find ~/ -name LICENSE | xargs -d $'\n' -- rm

При­ятная и мало­извес­тная фиш­ка: xargs уме­ет сам рас­парал­леливать задачи. Хочешь запус­тить кучу задач парал­лель­но? xargs -P 16 сде­лает это в 16 потоков. Надо боль­ше? Прос­то уве­личь чис­ло. Никаким for такого резуль­тата не получишь.

Ко­неч­но, мож­но исполь­зовать $(...), но это не так удоб­но, как запуск все­го одной коман­ды. Ска­жем, в при­мере выше мож­но исполь­зовать параметр -exec у find, но это мог­ло бы запус­тить сот­ни про­цес­сов уда­ления вмес­то все­го одно­го. Опти­миза­ция налицо!

 

miller

Miller — это ути­лита, которая уме­ет обра­баты­вать струк­туриро­ван­ные дан­ные в фор­матах CSV, TSV и JSON. Ука­зыва­ем исходный фор­мат, ука­зыва­ем нуж­ный нам фор­мат — и получа­ем резуль­тат в жела­емом виде.

Ес­ли у тебя Ubuntu, miller уста­нав­лива­ется одной коман­дой.

sudo apt install miller

Инс­трук­ции по уста­нов­ке для дру­гих ОС и дис­три­бути­вов ты най­дешь в репози­тории про­екта.

Для при­мера я взял файл CSV с какими‑то слу­чай­ными дан­ными и поп­росил miller вывес­ти его кра­сиво с сор­тиров­кой по полю Location.

Ес­ли ты работа­ешь с таб­лицами из тер­минала, то это полез­ней­шая шту­ка!

 

Всякое

 

Windows Registry Recovery

Как ты зна­ешь, кус­ки реес­тра Windows хра­нят­ся в пап­ках поль­зовате­лей. Не менее извес­тно, что эти фай­лы могут содер­жать что‑то цен­ное, что быва­ет нуж­но отту­да извлечь. Для это­го обыч­но копиру­ют файл NTUSER.DAT и мон­тиру­ют его на реестр, но лич­но мне попада­лись экзем­пля­ры, которые штат­ными средс­тва­ми упор­но не читались, а про­читать было позарез нуж­но.

Вы­ход нашел­ся: прог­рамма Windows Registry Recovery пра­виль­но разоб­рала такие нечита­бель­ные фай­лы и помог­ла выпол­нить задание. Для лич­ного исполь­зования (а нам ведь боль­ше и не надо, прав­да?) прог­рамма бес­плат­на.

 

PAM duress

Пред­ставь, что у тебя на пороге вдруг появи­лись какие‑нибудь неж­данные гос­ти, которых может заин­тересо­вать информа­ция в тво­ем компь­юте­ре. Но ты уже под­готов­лен! Даже если тебя зас­тавят залоги­нить­ся в сис­тему или выдать пароль, ты смо­жешь наз­вать спе­циаль­ный пароль, что акти­виру­ет скрипт, унич­тожа­ющий все инте­рес­ное.

Сде­лать это поможет средс­тво pam-duress. Реали­зова­но оно как PAM-биб­лиоте­ка (Pluggable Authentication Module), которая под­клю­чает­ся к про­цес­су обра­бот­ки зап­роса на авто­риза­цию и обра­баты­вает вве­ден­ный пароль по сво­ей логике, если обыч­ный вход не удал­ся.

Ус­танов­ка чуть слож­нее обыч­ного, но оно того сто­ит.

sudo apt install build-essential libpam0g-dev libssl-dev
git clone https://github.com/nuvious/pam-duress.git
make
sudo make install
make clean
mkdir -p ~/.duress
sudo mkdir -p /etc/duress.d

Пос­ле уста­нов­ки модуля его нуж­но вклю­чить, что­бы сис­тема исполь­зовала его для аутен­тифика­ции поль­зовате­лей. Для это­го нуж­но отре­дак­тировать /etc/pam.d/common-auth и заменить эти две стро­ки на сле­дующие:

auth [success=1 default=ignore] pam_unix.so
auth requisite pam_deny.so
auth [success=2 default=ignore] pam_unix.so
auth [success=1 default=ignore] pam_duress.so
auth requisite pam_deny.so

Те­перь мож­но нас­тра­ивать и тес­тировать.

Скрип­ты в ~/.duress дол­жны иметь раз­решения 500, 540 или 550, в про­тив­ном слу­чае они не будут выпол­нены.

Под­ложный пароль зада­ется при выпол­нении duress_sign и дол­жен не сов­падать с обыч­ным.

На скри­не выше ты видишь тес­тирова­ние. В пер­вом слу­чае я ввел нас­тоящий пароль и ничего не про­изош­ло. Во вто­ром ввел под­ложный — и выпол­нился скрипт, вывод которо­го попал в кон­соль.

Важ­ное уточ­нение: при сбор­ке по этой инс­трук­ции ты не получишь никако­го вывода в кон­соли. Это не ошиб­ка: скрипт все рав­но выпол­няет­ся, но его вывод перенап­равлен в /dev/null. Если ни один скрипт не может быть выпол­нен при вво­де липово­го пароля — pam_test выведет Not Authenticated. Для прос­мотра вывода нуж­на отла­доч­ная сбор­ка. Как ее соб­рать — читай в репози­тории авто­ра.

 

Eternal Terminal

За­дача Eternal Terminal — сде­лать так, что­бы соеди­нение с уда­лен­ным сер­вером по SSH не при­чиня­ло боль при нес­табиль­ном кон­некте или сме­не IP-адре­сов кли­ента (нап­ример, в дороге). Воз­можно, ты ска­жешь, что это похоже на Mosh. Автор это­го и не скры­вает, прос­то его ути­лита работа­ет гораз­до луч­ше.

Eternal Terminal не переза­пус­кает сес­сию при падении (для это­го есть autossh), а обес­печива­ет бес­шовное перек­лючение меж­ду аплинка­ми без пре­рыва­ний сес­сии. Пос­коль­ку я час­то работаю не из дома, дер­жать все SSH-кон­некты живыми без пов­режде­ний ста­новит­ся неп­росто, и Eternal Terminal сос­лужил мне отличную служ­бу.

Ус­танов­ка ET в Ubuntu прос­та:

sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:jgmath2000/et
sudo apt-get update
sudo apt-get install et

Те­перь про­верь, жив ли демон на сер­вере:

systemctl status et

Ес­ли написа­но running — зна­чит, все сде­лано пра­виль­но. Оста­ется толь­ко открыть порт 2022 и убе­дить­ся, что ты можешь под­клю­чит­ся без пароля. Все нас­трой­ки будут авто­мати­чес­ки под­тянуты из фай­ла ssh_config, если он есть, так что ты даже не потеря­ешь фиш­ки, спе­цифич­ные для SSH. А даль­ше с кли­ент­ской машины прос­то вбей et user@hostname[:port] и забудь про обры­вы соеди­нения!

screen

Мы уже недав­но упо­мина­ли screen в статье про инс­тру­мен­тарий девоп­са, но я хотел бы сно­ва напом­нить об этом чудо‑инс­тру­мен­те, который выручал меня до того, как я нашел Eternal Terminal. Если крат­ко, screen соз­дает вир­туаль­ную кон­соль, которая не уми­рает вмес­те с SSH-соеди­нени­ем и поз­воля­ет перепод­клю­чить­ся (screen -r) к ней пос­ле рекон­некта.

 

Ventoy

Один из инс­тру­мен­тов, который сэконо­мил мне огромное количес­тво вре­мени, — это Ventoy. Он приз­ван обес­печить удоб­ное соз­дание муль­тизаг­рузоч­ных носите­лей без садома­зохиз­ма и нет­радици­онных отно­шений с доис­торичес­кими заг­рузчи­ками. Все что нуж­но — это уста­новить Ventoy с помощью удоб­ного инстал­лятора из любой ОС и закинуть ISO-фай­лы тре­буемых опе­раци­онок на соз­данный раз­дел.

Ин­стал­лятор ты най­дешь на стра­нице заг­рузки на сай­те прог­раммы. В Windows (отку­да я и соз­давал свой про­качан­ный диск) нуж­но рас­паковать архив и запус­тить Ventoy2Disk.exe, а там выб­рать нуж­ный носитель из спис­ка и нажать Install.

До­пол­нитель­ные нас­трой­ки вро­де сти­ля раз­делов и под­дер­жки Secure Boot находят­ся в меню Option.

Ког­да с уста­нов­кой и копиро­вани­ем ISO будет покон­чено, мож­но перезаг­ружать­ся. Если все зарабо­тало, то ты уви­дишь меню как на скри­не ниже.

Скриншот взят с сайта
Скрин­шот взят с сай­та

Для заг­рузки прос­то выбери ISO из спис­ка и наж­ми Enter. Всё! И Windows, и популяр­ные дис­три­бути­вы Linux без проб­лем заг­ружа­ются через Ventoy. Никакой воз­ни с перепа­ков­кой обра­зов и нас­трой­кой grub4dos.

При изме­нении спис­ка обра­зов на носите­ле никаких допол­нитель­ных дей­ствий не нуж­но — ни замены кон­фигов, ни пере­уста­нов­ки. Все под­тянет­ся само и будет работать.

www

Прог­рамма име­ет откры­тый исходный код — он дос­тупен на GitHub.

 

Выводы

Не исклю­чаю, что о мно­гих инс­тру­мен­тах ты уже зна­ешь, а еще навер­няка тебе извес­тны и дру­гие полез­ные ути­литы, о которых мы не писали. В таком слу­чае дай знать в ком­мента­риях или пиши в редак­цию, и мы пос­тара­емся испра­вить это упу­щение!

Оцени статью:

Что тебе понравилось больше всего?
Что тебе не понравилось больше всего?